#include "StdAfx.h"
#include "MD5.h"

namespace Crypt {

MD5::MD5() : mIsFinal(false) {
	MD5_Init(&mCtx);
}

void MD5::getDigest(uint8 (&buffer)[MD5_DIGEST_LENGTH]) {
	if(mIsFinal == false) {
		MD5_Final(mDigest, &mCtx);
		mIsFinal = true;
	}

	memcpy(buffer, mDigest, MD5_DIGEST_LENGTH);
}

const uint8* MD5::getDigest() {
	if(mIsFinal == false) {
		MD5_Final(mDigest, &mCtx);
		mIsFinal = true;
	}

	return mDigest;
}

void MD5::update(const void* data, uint32 numBytes) {
	MD5_Update(&mCtx, data, numBytes);
	mIsFinal = false;
}

};